"""
项目简介
房屋家具管理系统

知识模块
Python 编程语言
知识点
对象的封装
类的构造方法和实例属性
for循环
受众
初级测试开发工程师
初级Python开发工程师
作业要求
编写一个Python程序： - 1.房子有户型，总面积和家具名称列表，新房子没有任何的家具。 - 2.家具有名字和占地面积，其中 - 床：占4平米 - 衣柜：占2平米 - 餐桌：占1.5平米 - 3.将以上三件家具添加到房子中 - 4.打印房子时，要求输出:户型，总面积，剩余面积，家具名称列表

解题思路
首先创建一个房子类（House），包括房子的户型和总面积属性，以及一个家具列表属性。

在房子类中定义一个添加家具的方法（add_furniture），该方法接收一个家具对象作为参数。

在添加家具的方法中，首先判断房子的剩余面积是否足够容纳这件家具，如果足够，则将家具对象添加到家具列表中，同时更新房子的剩余面积。如果不够，打印提示信息。

创建一个家具类（Furniture），包括家具的名称和占地面积属性。

通过创建多个家具对象，设置它们的名称和占地面积。

创建一个房子对象（my_house），传入初始的户型和总面积。

调用房子对象的添加家具方法，依次将家具对象添加到房子中。

最后调用房子对象的打印信息方法（display）来展示房子的户型、总面积、剩余面积和家具名称列表。

"""

# 定义房子类
class House:
  def __init__(self, house_type, total_area):
    self.house_type = house_type # 户型
    self.total_area = total_area # 总面积
    self.furniture = [] # 家具列表

  # 添加家具
  def add_furniture(self, furniture):
    if self.total_area >= furniture.area: # 判断剩余面积是否足够
      self.furniture.append(furniture) # 添加家具到家具列表
      self.total_area -= furniture.area # 更新剩余面积
      print(f"{furniture.name}已添加到房子中")
    else:
      print(f"房子剩余面积不足，无法添加{furniture.name}")

  # 展示房子信息
  def display(self):
    # 打印户型
    print("户型:", self.house_type)
    # 打印总面积
    print("总面积:", self.total_area, "平米")
    # 打印剩余面积
    print("剩余面积:", self.total_area, "平米")
    # 打印家具名称列表
    print("家具名称列表:")
    for furniture in self.furniture:#循环遍历家具列表，打印出每个家具的名字
      print(furniture.name)


# 定义家具类
class Furniture:
  def __init__(self, name, area):
    self.name = name # 家具名称
    self.area = area # 家具占地面积


# 创建房子对象
my_house = House("两室一厅", 100)

# 创建家具对象
bed = Furniture("床", 4)
wardrobe = Furniture("衣柜", 2)
table = Furniture("餐桌", 1.5)

# 添加家具到房子中
my_house.add_furniture(bed)
my_house.add_furniture(wardrobe)
my_house.add_furniture(table)

# 打印房子信息
my_house.display()


"""
定义了一个房子类（House），包含了房子的户型、总面积和家具列表属性。

定义了一个家具类（Furniture），包含了家具的名称和占地面积属性。

在房子类中，定义了添加家具的方法（add_furniture），用于判断剩余面积是否足够添加家具，并更新房子的剩余面积和家具列表。

在房子类中，定义了展示房子信息的方法（display），打印房子的户型、总面积、剩余面积和家具名称列表。

创建了一个房子对象（my_house）以及几个家具对象（bed、wardrobe、table）。

调用房子对象的添加家具方法，将家具对象添加到房子中。

最后调用房子对象的展示信息的方法，打印出房子的信息。
"""